package com.star.spring.ratelimit.annotation;

import com.star.spring.ratelimit.enums.RateLimitType;

import java.lang.annotation.*;

/**
 * 限流注解
 * 
 * @author star
 * @since 2025-01-24
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {

    /**
     * 限流类型
     */
    RateLimitType type() default RateLimitType.LOCAL_TOKEN_BUCKET;

    /**
     * 限流key，支持SpEL表达式
     */
    String key() default "";

    /**
     * 限流时间窗口（秒）
     */
    int timeWindow() default 60;

    /**
     * 限流次数
     */
    int count() default 100;

    /**
     * 限流提示信息
     */
    String message() default "系统繁忙，请稍后再试";

    /**
     * 是否启用限流
     */
    boolean enabled() default true;
}
